package com.yugao.fintech.antelope.base.model.module.config.param;

import com.alibaba.fastjson2.JSON;
import com.yugao.fintech.antelope.base.model.enums.ConfigKeyEnum;
import com.yugao.fintech.framework.assistant.utils.StringUtils;
import com.yugao.fintech.framework.desensitization.annotations.FieldSensitive;
import com.yugao.fintech.framework.desensitization.fieldsensitive.enums.StrategyType;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
import org.springframework.stereotype.Component;

import javax.validation.constraints.NotEmpty;

/**
 * 微信小程序配置参数
 *

 */
@Getter
@Setter
@Component
@Accessors(chain = true)
public class WxMaParam extends BaseConfigParam<WxMaParam> {
    // 小程序信息配置
    /**
     * 小程序名称
     */
    @NotEmpty(message = "小程序名称不能为空")
    private String name;

    /**
     * 小程序账号
     */
    @NotEmpty(message = "小程序账号ID不能为空")
    private String accountId;

    /**
     * 小程序二维码
     */
    private String qrCodeUrl;

    // 小程序开发信息
    /**
     * 小程序ID
     */
    @NotEmpty(message = "应用ID不能为空")
    private String appId;

    /**
     * 小程序密钥
     */
    @NotEmpty(message = "应用密钥不能为空")
    @FieldSensitive(StrategyType.RESERVE_6)
    private String appSecret;

    // 消息推送配置
    /**
     * 推送的地址
     */
    private String msgPushUrl;

    /**
     * 必须为英文或数字，长度为3-32字符。
     */
    @Length(min = 3, max = 32, message = "Token长度为3-32字符")
    @FieldSensitive(StrategyType.RESERVE_4)
    private String token;

    /**
     * 消息加密密钥由43位字符组成，可随机修改，字符范围为A-Z，a-z，0-9。
     */
    @Length(min = 1, max = 43, message = "消息加密密钥 长度1-43字符")
    @FieldSensitive(StrategyType.RESERVE_4)
    private String encodingAesKey;

    // 服务器域名配置
    /**
     * request合法域名
     */
    private String requestUrl;

    /**
     * socket合法域名
     */
    private String socketUrl;

    /**
     * uploadFile合法域名
     */
    private String uploadFileUrl;

    /**
     * downloadFile合法域名
     */
    private String downloadFileUrl;

    @Override
    protected WxMaParam jsonToObject(String json) {
        if (StringUtils.isEmpty(json)) {
            return new WxMaParam();
        }
        return JSON.parseObject(json, WxMaParam.class);
    }

    @Override
    public ConfigKeyEnum configKey() {
        return ConfigKeyEnum.WX_MA;
    }
}
